package com.bgs.microservices.auth.sysuser.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 *
 * @ClassName SysUser
 * @Description 系统用户
 * @Author zcy
 * @Date 2023/3/24 15:43
 *
 * 案例实体类可仿照本类进行代码编写
 * 本例中包含了 @TableName @TableId  @TableField注解的使用
 *
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("sys_user") // TableName中的value是数据库的表名，如果实体类与表明字相同则可以省略TableName注解
public class SysUser implements Serializable {

    /**
     * TableId 指定实体类中的主键id
     * type属性可配置一下主键生成此略
     *  AUTO	数据库 ID 自增
     *  NONE	无状态，该类型为未设置主键类型（注解里等于跟随全局，全局里约等于 INPUT）
     *  INPUT	insert 前自行 set 主键值
     *  ASSIGN_ID	分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
     *  ASSIGN_UUID	分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)
     *  本系统中推荐使用 AUTO 数据库默认自增策略 本系统使用的mysql数据库支持自增
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 用户名
     * TableField 可指定字段名字 如果省属性名userName将被映射为 user_name
     */
    @TableField("user_name")
    private String userName;
    /**
     * 登录名
     */
    private String loginName;
    /**
     * 登录名
     */
    private String password;
    /**
     * 电话
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 头像id
     */
    private String avatarId;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 用户地址
     */
    private String address;
    /**
     * 用户创建时间
     *      DEFAULT, 不自动填充
     *     INSERT, 插入时自动填充
     *     UPDATE, 更新数据时自动填充
     *     INSERT_UPDATE; 插入和更新数据时均自动填充
     *
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//JsonFormat是出参格式化。
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")//DateTimeFormat 是入参格式化；
    @TableField(fill = FieldFill.INSERT)//插入时操作
    private Date createTime;
    /**
     * 更新时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//JsonFormat是出参格式化。
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")//DateTimeFormat 是入参格式化；
    @TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新的时候操作
    private Date updateTime;
    /**
     * 创建人 可以是创建方式  系统创建还是自己申请
     */
    private String createUser;
    /**
     * 修改人
     */
    private String updateUser;
    /**
     * 最后登陆IP
     */
    private String lastLoginIp;
    /**
     * 最后登陆日期
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss" )//DateTimeFormat 是入参格式化；
    private Date lastLoginTime;
    /**
     * 排序号
     */
    private Integer sortNum;
    /**
     * 用户状态 0 启用 1 禁用 2 注销
     */
    private Integer userFlag;
    /**
     * 备注
     */
    private String remarks;
}
